<?php

namespace Sdz\BlogBundle\Entity;
use Symfony\Component\Config\Definition\BooleanNode;

use Doctrine\ORM\Mapping as ORM;

/**
 * Article
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Sdz\BlogBundle\Entity\ArticleRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Article {
	
	/**
	 * @ORM\OneToMany(targetEntity="Sdz\BlogBundle\Entity\Commentaire", mappedBy="article")
	 */
	private $commentaires; // Ici commentaires prend un « s », car un article a plusieurs commentaires !
		
	/**
	 * @ORM\ManyToMany(targetEntity="Sdz\BlogBundle\Entity\Categorie", cascade={"persist"})
	 */
	private $categories;

	/**
	 * @ORM\OneToOne(targetEntity="Sdz\BlogBundle\Entity\Image", cascade={"persist"})
	 */
	private $image;

	/**
	 * @var integer
	 *
	 * @ORM\Column(name="id", type="integer")
	 * @ORM\Id
	 * @ORM\GeneratedValue(strategy="AUTO")
	 */
	private $id;

	/**
	 * @var \DateTime
	 *
	 * @ORM\Column(name="date", type="datetime")
	 */
	private $date;

	/**
	 * 
	 * @var \DateTime
	 * @ORM\Column(name="dateEdition", type="datetime")
	 */
	private $dateEdition;
	
	/**
	 * @var string
	 *
	 * @ORM\Column(name="titre", type="string", length=255)
	 */
	private $titre;

	/**
	 * @var string
	 *
	 * @ORM\Column(name="auteur", type="string", length=255)
	 */
	private $auteur;

	/**
	 * @var string
	 *
	 * @ORM\Column(name="contenu", type="text")
	 */
	private $contenu;

	/**
	 * @var Boolean
	 * 
	 * @ORM\Column(name="publication", type="boolean")
	 */
	private $publication;
	
	/**
	 * @ORM\Column(name="nbCommentaires", type="integer")
	 * @var integer
	 */
	private $nbCommentaires;

	public function __construct() {
		$this->date = new \DateTime();
		$this->publication = true;
		$this->image = 'http://uploads.siteduzero.com/icones/478001_479000/478657.png';
		$this->categories = new \Doctrine\Common\Collections\ArrayCollection();
		// Rappelez-vous, on a un attribut qui doit contenir un ArrayCollection, on doit l'initialiser dans le constructeur
		$this->commentaires = new \Doctrine\Common\Collections\ArrayCollection();
	}
	
	/**
	 * @ORM\PreUpdate
	 */
	public function updateDate()
	{
		$this->setDateEdition(new \DateTime());
	}
	
	/**
	 * Get id
	 *
	 * @return integer 
	 */
	public function getId() {
		return $this->id;
	}

	/**
	 * Set date
	 *
	 * @param \DateTime $date
	 * @return Article
	 */
	public function setDate($date) {
		$this->date = $date;

		return $this;
	}

	/**
	 * Get date
	 *
	 * @return \DateTime 
	 */
	public function getDate() {
		return $this->date;
	}

	/**
	 * Set titre
	 *
	 * @param string $titre
	 * @return Article
	 */
	public function setTitre($titre) {
		$this->titre = $titre;

		return $this;
	}

	/**
	 * Get titre
	 *
	 * @return string 
	 */
	public function getTitre() {
		return $this->titre;
	}

	/**
	 * Set auteur
	 *
	 * @param string $auteur
	 * @return Article
	 */
	public function setAuteur($auteur) {
		$this->auteur = $auteur;

		return $this;
	}

	/**
	 * Get auteur
	 *
	 * @return string 
	 */
	public function getAuteur() {
		return $this->auteur;
	}

	/**
	 * Set contenu
	 *
	 * @param string $contenu
	 * @return Article
	 */
	public function setContenu($contenu) {
		$this->contenu = $contenu;

		return $this;
	}

	/**
	 * Get contenu
	 *
	 * @return string 
	 */
	public function getContenu() {
		return $this->contenu;
	}

	/**
	 * Set publication
	 *
	 * @param \boolean $publication
	 * @return Article
	 */
	public function setPublication($publication) {
		$this->publication = $publication;

		return $this;
	}

	/**
	 * Get publication
	 *
	 * @return \boolean 
	 */
	public function getPublication() {
		return $this->publication;
	}

	/**
	 * Set image
	 *
	 * @param \Sdz\BlogBundle\Entity\Image $image
	 * @return Article
	 */
	public function setImage(\Sdz\BlogBundle\Entity\Image $image = NULL) {
		$this->image = $image;

		return $this;
	}

	/**
	 * Get image
	 *
	 * @return \Sdz\BlogBundle\Entity\Image 
	 */
	public function getImage() {
		return $this->image;
	}

	/**
	 * Add categories
	 *
	 * @param \Sdz\BlogBundle\Entity\Categorie $categories
	 * @return Article
	 */
	public function addCategory(\Sdz\BlogBundle\Entity\Categorie $categorie) {
		$this->categories[] = $categorie;

		return $this;
	}

	/**
	 * Remove categories
	 *
	 * @param \Sdz\BlogBundle\Entity\Categorie $categories
	 */
	public function removeCategory(
			\Sdz\BlogBundle\Entity\Categorie $categorie) {
		$this->categories->removeElement($categorie);
	}

	/**
	 * Get categories
	 *
	 * @return \Doctrine\Common\Collections\Collection 
	 */
	public function getCategories() {
		return $this->categories;
	}

    /**
     * Add commentaires
     *
     * @param \Sdz\BlogBundle\Entity\Commentaire $commentaires
     * @return Article
     */
    public function addCommentaire(\Sdz\BlogBundle\Entity\Commentaire $commentaire)
    {
        $this->commentaires[] = $commentaire;
        $commentaires->setArticle($this); // On ajoute ceci
        return $this;
    }

    /**
     * Remove commentaires
     *
     * @param \Sdz\BlogBundle\Entity\Commentaire $commentaires
     */
    public function removeCommentaire(\Sdz\BlogBundle\Entity\Commentaire $commentaire)
    {
        $this->commentaires->removeElement($commentaire);
        // Et si notre relation était facultative (nullable=true, ce qui n'est pas notre cas ici attention) :
        // $commentaire->setArticle(null);
    }

    /**
     * Get commentaires
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getCommentaires()
    {
        return $this->commentaires;
    }

    /**
     * Set dateEdition
     *
     * @param \DateTime $dateEdition
     * @return Article
     */
    public function setDateEdition($dateEdition)
    {
        $this->dateEdition = $dateEdition;

        return $this;
    }

    /**
     * Get dateEdition
     *
     * @return \DateTime 
     */
    public function getDateEdition()
    {
        return $this->dateEdition;
    }

    /**
     * Set nbCommentaires
     *
     * @param integer $nbCommentaires
     * @return Article
     */
    public function setNbCommentaires($nbCommentaires)
    {
        $this->nbCommentaires = $nbCommentaires;

        return $this;
    }

    /**
     * Get nbCommentaires
     *
     * @return integer 
     */
    public function getNbCommentaires()
    {
        return $this->nbCommentaires;
    }
}
